// 导入角色模型
const characterModel = require('../models/characterModel');

// 角色控制器类
class CharacterController {
  // 获取所有角色
  getAllCharacters(req, res) {
    try {
      const { category, search } = req.query;
      
      // 构建筛选条件
      const filters = {};
      if (category) {
        filters.category = category;
      }
      if (search) {
        filters.search = search;
      }
      
      // 获取角色列表
      const characters = characterModel.getAllCharacters(filters);
      
      return res.status(200).json({
        characters,
        total: characters.length
      });
    } catch (error) {
      return res.status(500).json({
        message: '获取角色列表失败',
        error: error.message
      });
    }
  }

  // 获取角色详情
  getCharacterById(req, res) {
    try {
      const { id } = req.params;
      
      // 获取角色详情
      const character = characterModel.getCharacterById(parseInt(id));
      
      if (!character) {
        return res.status(404).json({
          message: '角色不存在'
        });
      }
      
      // 按照系统提示要求的格式返回数据
      return res.status(200).json({
        id: character.id,
        name: character.name,
        description: character.description,
        personality: character.personality,
        avatar: character.avatar,
        categories: character.categories,
        createdAt: character.createdAt,
        updatedAt: character.updatedAt
      });
    } catch (error) {
      return res.status(500).json({
        message: '获取角色详情失败',
        error: error.message
      });
    }
  }

  // 创建新角色（需要管理员权限）
  createCharacter(req, res) {
    try {
      const userRole = req.user?.role;
      
      if (!userRole || userRole !== 'admin') {
        return res.status(403).json({
          message: '权限不足'
        });
      }
      
      const { name, description, personality, avatar, categories } = req.body;
      
      // 验证输入
      if (!name) {
        return res.status(400).json({
          message: '角色名称是必填项'
        });
      }
      
      // 创建新角色
      const newCharacter = characterModel.createCharacter({
        name,
        description,
        personality,
        avatar,
        categories
      });
      
      return res.status(201).json({
        message: '角色创建成功',
        character: newCharacter
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 更新角色信息（需要管理员权限）
  updateCharacter(req, res) {
    try {
      const userRole = req.user?.role;
      const { id } = req.params;
      const { name, description, personality, avatar, categories } = req.body;
      
      if (!userRole || userRole !== 'admin') {
        return res.status(403).json({
          message: '权限不足'
        });
      }
      
      // 更新角色信息
      const updatedCharacter = characterModel.updateCharacter(parseInt(id), {
        name,
        description,
        personality,
        avatar,
        categories
      });
      
      return res.status(200).json({
        message: '角色信息更新成功',
        character: updatedCharacter
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 删除角色（需要管理员权限）
  deleteCharacter(req, res) {
    try {
      const userRole = req.user?.role;
      const { id } = req.params;
      
      if (!userRole || userRole !== 'admin') {
        return res.status(403).json({
          message: '权限不足'
        });
      }
      
      // 删除角色
      const deletedCharacter = characterModel.deleteCharacter(parseInt(id));
      
      return res.status(200).json({
        message: '角色删除成功',
        character: deletedCharacter
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 获取所有角色分类
  getCharacterCategories(req, res) {
    try {
      const categories = characterModel.getCharacterCategories();
      
      return res.status(200).json({
        categories
      });
    } catch (error) {
      return res.status(500).json({
        message: '获取角色分类失败',
        error: error.message
      });
    }
  }

  // 搜索角色
  searchCharacters(req, res) {
    try {
      const { query } = req.query;
      
      if (!query) {
        return res.status(400).json({
          message: '搜索关键词不能为空'
        });
      }
      
      const results = characterModel.searchCharacters(query);
      
      return res.status(200).json({
        characters: results,
        total: results.length
      });
    } catch (error) {
      return res.status(500).json({
        message: '搜索角色失败',
        error: error.message
      });
    }
  }
}

// 导出角色控制器实例
module.exports = new CharacterController();